#coding=utf-8
#!/usr/bin/python
"""
<python select 接收到 signal>

select
    windows  非阻塞select  还是是不行
    Linux 可以


Linux 也没有 多线程 (不能同时处理)

    socket不能重用   有 TIME_WAIT 就无法再用

thread.start_new_thread(Communicate,(s,))  //???

#     cd /d D:\python26 
#     python.exe D:\py\demo\sock_thr_c.py

#       python.exe  .\dev_test\sock_thr_c.py
"""
import os,sys,time

# 不能 做多线程
import socket 
#信号处理
import signal

import random  
#都是内设 模块
import threading,select




############### 信号
def signal_do(signum, frame):
    u" 信号处理 "
    print "signal is ",signum
    print frame
    #有线程 在程序没法正常退出
    #exit
    exit(0)
    

signal.signal(signal.SIGINT,signal_do)

################# 线程
global  mutex 
# 创建锁 一把锁
mutex = threading.Lock()

host = '127.0.0.1'
port = 800

class thr_test(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        
        self.connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
        self.connection.connect((host, port))  
    
    def run(self):
        u" 连接处理 线程实际工作"
        global mutex
        threadname = threading.currentThread().getName()
        print threadname

       #获取全局锁
        mutex.acquire()
        # -----------操作
        #合理数据
        while True:  
            send_str =  random.randint(0,5)
            #收到 空格 退出
            if  send_str == 0:
                break
            #send和recv方法(发送，接受)
            self.connection.send(send_str)
            get_str = self.connection.recv(1024)  
            print  ' send_str= ' ,send_str , ' get_str = ' ,get_str

            

        self.connection.close() 
        #释放全局锁
        mutex.release()



if __name__ == '__main__':  
    
    #线程数 
    num = 5         
    #线程容器 
    threads = []    

    # 创建线程对象
    for x in xrange(0, num):
        thr_obj = thr_test()
        threads.append(thr_obj)
    # 启动线程
    for thr_obj in threads:
        #真正开始 线程
        thr_obj.start()
    # 等待子线程结束
    for thr_obj in threads:
        #线程结合
        thr_obj.join()  
        
    
    
    
    
    
    print __file__ ,':the end'
    sys.exit()
            